#include <cstdio>
#include <algorithm>

using namespace std;

struct Floor
{
    int l, r, h, w1, w2;
    Floor( int _l, int _r, int _h, int _w1, int _w2 )
        : l( _l ), r( _r ), h( _h ), w1( _w1 ), w2( _w2 ) { }
    Floor( ) { }
};

bool operator < ( const Floor &a, const Floor &b )
{
    if ( a.h > b.h )
        return true;
    if ( a.h < b.h )
        return false;
    if ( a.l < b.l )
        return true;
    if ( a.l > b.l )
        return false;
    return a.r < b.r;
}

Floor f[ 1002 ];
int n, m, e, Max, x, y;
bool use[ 1002 ];

void init( )
{
    int i, j, lx, rx, h;
    bool visit[ 1002 ];
    scanf("%d%d%d%d%d", &n, &x, &y, &Max, &m);
    e = 1;
    f[ 0 ] = Floor( x, x, y, 0xfffffff, 0xfffffff );
    for ( i = 0; i < n; i++ )
    {
        scanf("%d%d%d", &lx, &rx, &h);
        if ( h > y || lx == rx )
            continue;
        f[ e++ ] = Floor( lx, rx, h, 0xfffffff, 0xfffffff );
    }
    sort( f, f + e );
    for ( i = 0; i < e; i++ )
        use[ i ] = true;
    for ( i = 0; i < e; i++ )
    {
        if ( use[ i ] )
        {
            for ( j = i + 1; j < e; j++ )
            {
                if ( f[ j ].h != f[ i ].h || f[ j ].l > f[ i ].r )
                    break;
                if ( f[ j ].r > f[ i ].r )
                    f[ i ].r = f[ j ].r;
                use[ j ] = false;
            }
        }
    }
}

void work( )
{
    int i, j, k, minn = 0xfffffff;
    bool visit[ 1001 ];
    for ( i = 0; i < e; i++ )
        if ( use[ i ] && f[ i ].l <= x && f[ i ].r >= x && f[ i ].h == y )
        {
            f[ i ].w1 = x - f[ i ].l;
            f[ i ].w2 = f[ i ].r - x;
            break;
        }
    for ( i = 0; i < e; i++ )
    {
        if ( !use[ i ] )
            continue;
        for ( j = 0; j <= 1000; j++ )
            visit[ j ] = false;
        for ( j = i - 1; j >= 0; j-- )
        {
            if ( !use[ j ] )
                continue;
            if ( f[ j ].h - f[ i ].h > Max )
                break;
            if ( f[ i ].h == f[ j ].h )
                continue;
            if ( ( !visit[ f[ j ].l ] ) && f[ j ].l >= f[ i ].l && f[ j ].l <= f[ i ].r )
            {
                if ( f[ i ].w1 > f[ j ].w1 + f[ j ].h - f[ i ].h + f[ j ].l - f[ i ].l )
                    f[ i ].w1 = f[ j ].w1 + f[ j ].h - f[ i ].h + f[ j ].l - f[ i ].l;
                if ( f[ i ].w2 > f[ j ].w1 + f[ j ].h - f[ i ].h + f[ i ].r - f[ j ].l )
                    f[ i ].w2 = f[ j ].w1 + f[ j ].h - f[ i ].h + f[ i ].r - f[ j ].l;
            }
            if ( ( !visit[ f[ j ].r ] ) && f[ j ].r >= f[ i ].l && f[ j ].r <= f[ i ].r )
            {
                if ( f[ i ].w1 > f[ j ].w2 + f[ j ].h - f[ i ].h + f[ j ].r - f[ i ].l )
                    f[ i ].w1 = f[ j ].w2 + f[ j ].h - f[ i ].h + f[ j ].r - f[ i ].l;
                if ( f[ i ].w2 > f[ j ].w2 + f[ j ].h - f[ i ].h + f[ i ].r - f[ j ].r )
                    f[ i ].w2 = f[ j ].w2 + f[ j ].h - f[ i ].h + f[ i ].r - f[ j ].r;
            }
            for ( k = f[ j ].l; k <= f[ j ].r; k++ )
                visit[ k ] = true;
        }
    }
    for ( i = 0; i <= 1000; i++ )
        visit[ i ] = false;
    for ( i = e - 1; i >= 0; i-- )
    {
        if ( ( !use[ i ] ) || f[ i ].h > Max )
            continue;
        if ( minn > f[ i ].w1 + f[ i ].h && ( !visit[ f[ i ].l ] ) )
            minn = f[ i ].w1 + f[ i ].h;
        if ( minn > f[ i ].w2 + f[ i ].h && ( !visit[ f[ i ].r ] ) )
            minn = f[ i ].w2 + f[ i ].h;
        for ( j = f[ i ].l; j <= f[ i ].r; j++ )
            visit[ j ] = true;
    }
    if ( minn > m )
        puts("YES");
    else
        puts("NO");
}

int main( )
{
    int t;
    scanf("%d", &t);
    while ( t-- )
    {
        init( );
        work( );
    }
    return 0;
}
